package com.compasudea.polla.persistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.compasudea.polla.persistencia.Usuario;
import com.compasudea.polla.util.ConexionBD;

/**
 * Metodos expuestos de la entidad usuario que permiten manejar su persistencia
 * @author Ivan Londono.
 *
 */
public class DatabaseUsuarioDAO implements UsuarioDAO {

	/**
	 * Metodo que permite validar si existe un usuario con id y clave iguales
	 * a las ingresadas como parametros.
	 * @param id valor del id a validar.
	 * @param clave valor de la clave a validar.
	 * @return true si existe, false en otro caso.
	 */
	public boolean existeUsuario(String id, String clave) {
		
		ConexionBD adminConexiones = new ConexionBD();
		Connection con = adminConexiones.getConexion();
		
	    String query = "SELECT (1) FROM USUARIOS WHERE LOGIN = ? AND CONTRASENA = ?";
	   
	    ResultSet rs = null;    
	    PreparedStatement pstmt = null;
	    
	    if (id == null) {
	    	id = "";
	    }
	    
	    if (clave == null) {
	    	clave = "";
	    }
	    
	    try {     
	      pstmt = con.prepareStatement(query);
	      
	      pstmt.setString(1, id);	      
	      pstmt.setString(2, clave);
	      
	      rs = pstmt.executeQuery();
	      
	      while (rs.next()) {
	    	  
	    	  //si entra al menos una vez quiere decir que encontro el usuario
	    	  //con esa clave.
	    	  return true;

	      }	      
	      
	    } catch (SQLException e) {
	      e.printStackTrace();
	      
	    } finally { 
	    	
	    	//libera todos los recursos.
	    	try {
	    		
		    	if (rs != null) {
		    		rs.close();
		    	}
		    	
		    	if (pstmt != null) {
		    		pstmt.close();
		    	}
				
			} catch (SQLException e) {
				e.printStackTrace();
			}

			//adminConexiones.desconectar(con);
	      
	    }	    
	    
		return false;
	}
	
	/**
	 * Permite guardar la informacion asociada a un usuario.
	 * @param user usuario a guardar.
	 */
	public void guardarUsuario(Usuario user) {
		
		ConexionBD adminConexiones = new ConexionBD();
		Connection con = adminConexiones.getConexion();
		
	    String query = "INSERT INTO USUARIOS(ID_USER, CLAVE, NOMBRES, APELLIDOS, EMAIL) values(?, ?, ?, ?, ?);";
	   
	    PreparedStatement pstmt = null;
	    
	    try {     
		      pstmt = con.prepareStatement(query);
		      
		      pstmt.setString(1, user.getIdUser());	      
		      pstmt.setString(2, user.getClave());
		      pstmt.setString(3, user.getNombres());
		      pstmt.setString(4, user.getApellidos());
		      pstmt.setString(5, user.getEmail());
		      
		      pstmt.execute();  
		      con.commit();
		      
		    } catch (SQLException e) {
		      e.printStackTrace();
		      
		      try {
			      con.rollback();
			      
		      } catch (SQLException ex) {
		    	  e.printStackTrace();
		      }
		      
		    } finally { 
		    	
		    	//libera todos los recursos.
		    	try {
			    	
			    	if (pstmt != null) {
			    		pstmt.close();
			    	}
					
				} catch (SQLException e) {
					e.printStackTrace();
				}

				adminConexiones.desconectar(con);		      
		    }
	}
	
	/**
	 * Permite actualizar la informacion asociada a un usuario.
	 * @param user usuario a actualizar.
	 */
	public void actualizarUsuario(Usuario user) {
		
	}

}
